home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / pastutor.EXE / tutor08b.pas < prev    next >
Pascal/Delphi Source File  |  1998-04-02  |  6KB  |  270 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Vision 2.0 Demo                        }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. program Tutor08b;
  9.  
  10. uses Memory, TutConst, Drivers, Objects, Views, Menus, App, Dialogs,
  11.   Editors, StdDlg;
  12.  
  13. type
  14.   POrderWindow = ^TOrderWindow;
  15.   TOrderWindow = object(TDialog)
  16.     constructor Init;
  17.     procedure HandleEvent(var Event: TEvent); virtual;
  18.   end;
  19.  
  20.   TTutorApp = object(TApplication)
  21.     ClipboardWindow: PEditWindow;
  22.     OrderWindow: POrderWindow;
  23.     constructor Init;
  24.     destructor Done; virtual;
  25.     procedure DoAboutBox;
  26.     procedure HandleEvent(var Event: TEvent); virtual;
  27.     procedure InitMenuBar; virtual;
  28.     procedure InitStatusLine; virtual;
  29.     procedure LoadDesktop;
  30.     procedure NewWindow;
  31.     procedure OpenOrderWindow;
  32.     procedure OpenWindow;
  33.     procedure SaveDesktop;
  34.   end;
  35.  
  36. var
  37.   ResFile: TResourceFile;
  38.  
  39. const
  40.   ROrderWindow: TStreamRec = (
  41.      ObjType: 15001;
  42.      VmtLink: Ofs(TypeOf(TOrderWindow)^);
  43.      Load:    @TOrderWindow.Load;
  44.      Store:   @TOrderWindow.Store
  45.   );
  46.  
  47. procedure TutorStreamError(var S: TStream); far;
  48. var
  49.   ErrorMessage: String;
  50. begin
  51.   case S.Status of
  52.     stError: ErrorMessage := 'Stream access error';
  53.     stInitError: ErrorMessage := 'Cannot initialize stream';
  54.     stReadError: ErrorMessage := 'Read beyond end of stream';
  55.     stWriteError: ErrorMessage := 'Cannot expand stream';
  56.     stGetError: ErrorMessage := 'Unregistered type read from stream';
  57.     stPutError: ErrorMessage := 'Unregistered type written to stream';
  58.     end;
  59.   DoneVideo;
  60.   PrintStr('Error: ' + ErrorMessage);
  61.   Halt(Abs(S.Status));
  62. end;
  63.  
  64. constructor TOrderWindow.Init;
  65. var
  66.   R: TRect;
  67. begin
  68.   R.Assign(0, 0, 60, 17);
  69.   inherited Init(R, 'Orders');
  70.   Options := Options or ofCentered;
  71.   HelpCtx := $F000;
  72. end;
  73.  
  74. procedure TOrderWindow.HandleEvent(var Event: TEvent);
  75. begin
  76.   inherited HandleEvent(Event);
  77.   if (Event.What = evBroadcast) and
  78.     (Event.Command = cmFindOrderWindow) then
  79.     ClearEvent(Event);
  80. end;
  81.  
  82. constructor TTutorApp.Init;
  83. var
  84.   R: TRect;
  85. begin
  86.   MaxHeapSize := 8192;
  87.   EditorDialog := StdEditorDialog;
  88.   StreamError := @TutorStreamError;
  89.   RegisterMenus;
  90.   RegisterObjects;
  91.   RegisterViews;
  92.   RegisterApp;
  93.   RegisterEditors;
  94.   RegisterDialogs;
  95.   RegisterType(ROrderWindow);
  96.   ResFile.Init(New(PBufStream, Init('TUTORIAL.TVR', stOpenRead, 1024)));
  97.   inherited Init;
  98.   DisableCommands([cmStockWin, cmSupplierWin]);
  99.   Desktop^.GetExtent(R);
  100.   ClipboardWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  101.   if ValidView(ClipboardWindow) <> nil then
  102.   begin
  103.     ClipboardWindow^.Hide;
  104.     InsertWindow(ClipboardWindow);
  105.     Clipboard := ClipboardWindow^.Editor;
  106.     Clipboard^.CanUndo := False;
  107.   end;
  108. end;
  109.  
  110. destructor TTutorApp.Done;
  111. begin
  112.   ResFile.Done;
  113.   inherited Done;
  114. end;
  115.  
  116. procedure TTutorApp.DoAboutBox;
  117. begin
  118.   ExecuteDialog(PDialog(ResFile.Get('ABOUTBOX')), nil);
  119. end;
  120.  
  121. procedure TTutorApp.HandleEvent(var Event: TEvent);
  122. var
  123.   R: TRect;
  124. begin
  125.   inherited HandleEvent(Event);
  126.   if Event.What = evCommand then
  127.   begin
  128.     case Event.Command of
  129.       cmOrderWin:
  130.         begin
  131.           OpenOrderWindow;
  132.           ClearEvent(Event);
  133.         end;
  134.       cmOptionsLoad:
  135.         begin
  136.           LoadDesktop;
  137.           ClearEvent(Event);
  138.         end;
  139.       cmOptionsSave:
  140.         begin
  141.           SaveDesktop;
  142.           ClearEvent(Event);
  143.         end;
  144.       cmClipShow:
  145.         with ClipboardWindow^ do
  146.         begin
  147.           Select;
  148.           Show;
  149.           ClearEvent(Event);
  150.         end;
  151.       cmNew:
  152.         begin
  153.           NewWindow;
  154.           ClearEvent(Event);
  155.         end;
  156.       cmOpen:
  157.         begin
  158.           OpenWindow;
  159.           ClearEvent(Event);
  160.         end;
  161.       cmOptionsVideo:
  162.         begin
  163.           SetScreenMode(ScreenMode xor smFont8x8);
  164.           ClearEvent(Event);
  165.         end;
  166.       cmAbout:
  167.         begin
  168.           DoAboutBox;
  169.           ClearEvent(Event);
  170.         end;
  171.     end;
  172.   end;
  173. end;
  174.  
  175. procedure TTutorApp.InitMenuBar;
  176. begin
  177.   MenuBar := PMenuBar(ResFile.Get('MAINMENU'));
  178. end;
  179.  
  180. procedure TTutorApp.InitStatusLine;
  181. var
  182.   R: TRect;
  183. begin
  184.   StatusLine := PStatusLine(ResFile.Get('STATUS'));
  185.   GetExtent(R);
  186.   StatusLine^.MoveTo(0, R.B.Y - 1);
  187. end;
  188.  
  189. procedure TTutorApp.LoadDesktop;
  190. var
  191.   DesktopFile: TBufStream;
  192.   TempDesktop: PDesktop;
  193.   R: TRect;
  194. begin
  195.   DesktopFile.Init('DESKTOP.TUT', stOpenRead, 1024);
  196.   TempDesktop := PDesktop(DesktopFile.Get);
  197.   DesktopFile.Done;
  198.   if ValidView(TempDesktop) <> nil then
  199.   begin
  200.     Desktop^.Delete(ClipboardWindow);
  201.     Delete(Desktop);
  202.     Dispose(Desktop, Done);
  203.     Desktop := TempDesktop;
  204.     Insert(Desktop);
  205.     GetExtent(R);
  206.     R.Grow(0, -1);
  207.     Desktop^.Locate(R);
  208.     InsertWindow(ClipboardWindow);
  209.   end;
  210. end;
  211.  
  212. procedure TTutorApp.NewWindow;
  213. var
  214.   R: TRect;
  215.   TheWindow: PEditWindow;
  216. begin
  217.   R.Assign(0, 0, 60, 20);
  218.   TheWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  219.   InsertWindow(TheWindow);
  220. end;
  221.  
  222. procedure TTutorApp.OpenOrderWindow;
  223. begin
  224.   if Message(Desktop, evBroadcast, cmFindOrderWindow, nil) = nil then
  225.   begin
  226.     OrderWindow := New(POrderWindow, Init);
  227.     InsertWindow(OrderWindow);
  228.   end
  229.   else
  230.     if PView(OrderWindow) <> Desktop^.TopView then OrderWindow^.Select;
  231. end;
  232.  
  233. procedure TTutorApp.OpenWindow;
  234. var
  235.   R: TRect;
  236.   FileDialog: PFileDialog;
  237.   TheFile: FNameStr;
  238. const
  239.   FDOptions: Word = fdOKButton or fdOpenButton;
  240. begin
  241.   TheFile := '*.*';
  242.   New(FileDialog, Init(TheFile, 'Open file', '~F~ile name',
  243.     FDOptions, 1));
  244.   if ExecuteDialog(FileDialog, @TheFile) <> cmCancel then
  245.   begin
  246.     R.Assign(0, 0, 75, 20);
  247.     InsertWindow(New(PEditWindow, Init(R, TheFile, wnNoNumber)));
  248.   end;
  249. end;
  250.  
  251. procedure TTutorApp.SaveDesktop;
  252. var
  253.   DesktopFile: TBufStream;
  254. begin
  255.   Desktop^.Delete(ClipboardWindow);
  256.   DesktopFile.Init('DESKTOP.TUT', stCreate, 1024);
  257.   DesktopFile.Put(Desktop);
  258.   DesktopFile.Done;
  259.   InsertWindow(ClipboardWindow);
  260. end;
  261.  
  262. var
  263.   TutorApp: TTutorApp;
  264.  
  265. begin
  266.   TutorApp.Init;
  267.   TutorApp.Run;
  268.   TutorApp.Done;
  269. end.
  270.